using System;
using System.Collections.Generic;
using System.Diagnostics.Contracts;

namespace Windy.Transformations
{
    public interface ITransformSink<in TInput, in TOutput> 
    {
        void OnVoidTransform(int index, TInput inputItem);
        void OnMonoTransform(int index, TInput inputItem, TOutput outputItem);
        void OnVaryTransform(int index, TInput inputItem, IEnumerable<TOutput> outputItems);

        void OnTransformBegun();
        void OnTransformCompleted();
        void OnTransformAborted();

        bool IsInTransformation { get; }
    }
}